package cn.tedu;

import cn.tedu.util.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Date：2022年03月
 * Author：程Sir
 * Name： JDBC_project
 * Content:
 *  向user表中新增1001条用户数据,可以使用批量操作完成要求每20条sql语句为一批,整体发送到mysql执行
 */
public class JdbcPrepared2 {
    public static void main(String[] args) {
        // 获取连接
        try(Connection connection = JDBCUtils.getConnection()){
            // sql
            String sql = "insert into user values(null, ?, ?)";
            // 获取preparedStatement对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            // 当执行的次数越多，占用的内存就会越大！可能会出现内存溢出的情况，解决方案就是每批量添加一次，就执行一次，执行完就处理一次
            for (int i = 0; i <1001 ; i++) {
                // 对占位符赋值
                preparedStatement.setString(1,"chengsir"+i);
                preparedStatement.setString(2,"123abc"+i);
                // 添加执行计划
                preparedStatement.addBatch();
                if (i % 20 ==0){ // 当i执行20次时，说明已经添加了20条执行计划
                    // 开始执行批量计划  -- 一次性处理20条执行计划
                    preparedStatement.executeBatch();
                    // 调用该方法之后，每20条被执行的计划就会被清理掉。
                    preparedStatement.clearBatch();
                }
                // 将不够20次的执行计划全部执行！
                preparedStatement.executeBatch();
                // 调用该方法之后，将最后一条被执行的计划就会被清理掉。
                preparedStatement.clearBatch();
            }


        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }


    }
}
